package diplom.shop.services;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import diplom.shop.dao.MouseDAO;
import diplom.shop.domain.Category;

public class DomainServices {
	public static List<String> getDeviceAttribute(){
		List<String> spec = new ArrayList<String>();
		spec.add("category");
		spec.add("deviceName");
		spec.add("cost");
		spec.add("guaranty");
		spec.add("image");
		return spec;
	}
	public static List<String> getDeviceAttributeText(){
		List<String> spec = new ArrayList<String>();
		spec.add("Категорія");
		spec.add("Назва");
		spec.add("Ціна");
		spec.add("Гарантія");
		spec.add("Фото");
		return spec;
	}
	//Миша
	//Команди повертають назви атрибутів класу Миша що будуть значеннями айді полів форми та відповідно Опис кожного поля
	public static List<String> getMouseSpecification() {
		List<String> spec = new ArrayList<String>();
//		spec.addAll(getDeviceAttribute());
		spec.add("buttonCount");
		return spec;
	}
	
	public static List<String> getMouseFormAttribute() {
		List<String> spec = new ArrayList<String>();
		//spec.addAll(getDeviceAttributeText());
		spec.add("Кількість кнопок");
		return spec;
		
	}
	public  static List<ArrayList<String>> getMouseForm(){
		List<ArrayList<String>> mouseForm = new ArrayList<ArrayList<String>>();
		List<String> formFieldsText = getMouseFormAttribute(); 
		List<String> formFieldsId = getMouseSpecification();
		for(int i = 0 ; i< formFieldsId.size(); i ++ ){
			ArrayList<String> field = new ArrayList<String>(); 
			field.add(formFieldsText.get(i));
			field.add(formFieldsId.get(i));
			mouseForm.add(field);
		}
		return mouseForm;
	}
	//процесор
	public static List<String> getProcessorSpecification() {
		List<String> spec = new ArrayList<String>();
		
		//spec.addAll(getDeviceAttribute());
		spec.add("processorFamily");
		spec.add("socket");
		spec.add("contactCount");
		spec.add("internalClockFrequency");
		spec.add("coreCount");
		spec.add("casheFirstLevel");
		spec.add("casheSecondLevel");
		spec.add("integratedGraphics");
		
		return spec;
	}
	
	public static List<String> getProcessorFormAttribute() {
		List<String> spec = new ArrayList<String>();
	//	spec.addAll(getDeviceAttributeText());
		spec.add("Сімейство прцоессора");
		spec.add("Тип розєму");
		spec.add("Кількість контактів");
		spec.add("Внутрішня тактова частота");
		spec.add("Кількість ядер");
		spec.add("Обєм кеш 1 рівня");
		spec.add("Обєм кеш 2 рівня");
		spec.add("Інтегрована графіка");
		return spec;
		
	}
	public  static List<ArrayList<String>> getProcessorForm(){
		List<ArrayList<String>> mouseForm = new ArrayList<ArrayList<String>>();
		List<String> formFieldsText = getProcessorFormAttribute(); 
		List<String> formFieldsId = getProcessorSpecification();
		for(int i = 0 ; i< formFieldsId.size(); i ++ ){
			ArrayList<String> field = new ArrayList<String>(); 
			field.add(formFieldsText.get(i));
			field.add(formFieldsId.get(i));
			mouseForm.add(field);
		}
		return mouseForm;
	}
	//Motherboard 
	public static List<String> getMotherboardSpecification() {
		List<String> spec = new ArrayList<String>();	
		//spec.addAll(getDeviceAttribute());
		spec.add("formFactor");
		spec.add("connectorType");
		spec.add("processorSupport");
		spec.add("chipsetNorthbridge");
		
		spec.add("memorySupport");
		spec.add("maximumMemory");
		spec.add("raidController");
		spec.add("powerConnector");
		
		spec.add("builtInVideo");
		spec.add("builtInAudio");
		spec.add("numberSata2Connectors");
		spec.add("numberSata3connectors");
		
		spec.add("externalConnectors");
		spec.add("slotsExpansionCards");
		spec.add("physicalDimensions");
			
		return spec;
	}
	
	public static List<String> getMotherboardFormAttribute() {
		List<String> spec = new ArrayList<String>();
	//	spec.addAll(getDeviceAttributeText());
		spec.add("Форм фактор");
		spec.add("Тип розйому");
		spec.add("Підтримка процесорів");
		spec.add("Чіпсет(північний міст)");

		spec.add("Підтримка памяті");
		spec.add("Максимальний обєм оперативної памяті");
		spec.add("Контроллер RAID");	
		spec.add("Конектор живлення");
		
		spec.add("Вбудоване відео");
		spec.add("Вбудоване аудіо");
		spec.add("Кількість розємів Sata2");
		spec.add("Кількість розємів Sata3");

		spec.add("Зовнішні розєми");
		spec.add("Слоти для плат розширення");
		spec.add("Фізичні розміри");
		return spec;
		
	}
	public  static List<ArrayList<String>> getMotherboardForm(){
		List<ArrayList<String>> mouseForm = new ArrayList<ArrayList<String>>();
		List<String> formFieldsText = getMotherboardFormAttribute(); 
		List<String> formFieldsId = getMotherboardSpecification();
		for(int i = 0 ; i< formFieldsId.size(); i ++ ){
			ArrayList<String> field = new ArrayList<String>(); 
			field.add(formFieldsText.get(i));
			field.add(formFieldsId.get(i));
			mouseForm.add(field);
		}
		return mouseForm;
	}
////////////////////
	public static List<ArrayList<String>> getForm(Long categoryId){
		List<ArrayList<String>> forms = null;
		int categoryIdinInt = Integer.parseInt(categoryId.toString());
		switch (categoryIdinInt) {
		case 26: forms = getMouseForm(); break;
		case 28: forms = getProcessorForm(); break;
		case 30: forms = getMotherboardForm(); break;
		
		default:
			break;
		}
		
		return forms;
	}
	public static List<String> getSpecification(Long categoryId){
		List<String> specifications = null;
		int categoryIdinInt = Integer.parseInt(categoryId.toString());
		switch (categoryIdinInt) {
		case 26: specifications = getMouseSpecification(); break;
		case 28: specifications = getProcessorSpecification();break;
		case 30: specifications = getMotherboardSpecification();break;
		default:
			break;
		}
		
		return specifications;
	}
	
	public static List<Category> getCategoryList(){
		MouseDAO mouseDao =new MouseDAO();
		List<Category> categoryList =  mouseDao.getCategoryList();
		return categoryList;
	}
	public static Category getCategoryById(Long id){
		MouseDAO mouseDao =new MouseDAO();
		Category category =  mouseDao.getCategoryById(id);
		return category;
	}

	
}
